home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / PROGRAMR / OLE2BOOK.ZIP / CHAP12.ZIP / PATRON / TENANT.H < prev   
C/C++ Source or Header  |  1993-07-19  |  7KB  |  229 lines

  1. /*
  2.  * TENANT.H
  3.  * Modifications for Chapter 12
  4.  *
  5.  * Definitions and function prototypes for the CTenant class
  6.  *
  7.  * Copyright (c)1993 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Software Design Engineer
  10.  * Microsoft Systems Developer Relations
  11.  *
  12.  * Internet  :  kraigb@microsoft.com
  13.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  14.  */
  15.  
  16.  
  17. #ifndef _TENANT_H_
  18. #define _TENANT_H_
  19.  
  20.  
  21. class __far CImpIOleClientSite : public IOleClientSite
  22.     {
  23.     protected:
  24.         ULONG               m_cRef;      //Interface reference count.
  25.         class CTenant FAR * m_pTen;      //Back pointer to the object.
  26.         LPUNKNOWN           m_punkOuter; //Controlling unknown for delegation.
  27.  
  28.     public:
  29.         CImpIOleClientSite(class CTenant FAR *, LPUNKNOWN);
  30.         ~CImpIOleClientSite(void);
  31.  
  32.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  33.         STDMETHODIMP_(ULONG) AddRef(void);
  34.         STDMETHODIMP_(ULONG) Release(void);
  35.  
  36.         STDMETHODIMP SaveObject(void);
  37.         STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER FAR *);
  38.         STDMETHODIMP GetContainer(LPOLECONTAINER FAR *);
  39.         STDMETHODIMP ShowObject(void);
  40.         STDMETHODIMP OnShowWindow(BOOL);
  41.         STDMETHODIMP RequestNewObjectLayout(void);
  42.     };
  43.  
  44. typedef CImpIOleClientSite FAR * LPIMPIOLECLIENTSITE;
  45.  
  46.  
  47.  
  48. class __far CImpIAdviseSink : public IAdviseSink
  49.     {
  50.     protected:
  51.         ULONG               m_cRef;      //Interface reference count.
  52.         class CTenant FAR * m_pTen;      //Back pointer to the object.
  53.         LPUNKNOWN           m_punkOuter; //Controlling unknown for delegation.
  54.  
  55.     public:
  56.         CImpIAdviseSink(class CTenant FAR *, LPUNKNOWN);
  57.         ~CImpIAdviseSink(void);
  58.  
  59.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  60.         STDMETHODIMP_(ULONG) AddRef(void);
  61.         STDMETHODIMP_(ULONG) Release(void);
  62.  
  63.         STDMETHODIMP_(void)  OnDataChange(LPFORMATETC, LPSTGMEDIUM);
  64.         STDMETHODIMP_(void)  OnViewChange(DWORD, LONG);
  65.         STDMETHODIMP_(void)  OnRename(LPMONIKER);
  66.         STDMETHODIMP_(void)  OnSave(void);
  67.         STDMETHODIMP_(void)  OnClose(void);
  68.     };
  69.  
  70.  
  71. typedef CImpIAdviseSink FAR * LPIMPIADVISESINK;
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. /*
  79.  * Tenant class describing an individual piece of data in a page.
  80.  * It knows where it sits, what object is inside of it, and what
  81.  * its idenitifer is such that it can find it's storage within a page.
  82.  */
  83.  
  84. //Patron Objects clipboard format
  85. typedef struct tagPATRONOBJECT
  86.     {
  87.     POINTL      ptl;        //Location of object
  88.     POINTL      ptlPick;    //Pick point from drag-drop operation.
  89.     SIZEL       szl;        //Extents of object (absolute)
  90.     FORMATETC   fe;         //Actual object format.
  91.     } PATRONOBJECT, FAR * LPPATRONOBJECT;
  92.  
  93.  
  94.  
  95. //Values for hit-testing, drawing, and resize-tracking tenants
  96. #define CXYHANDLE       5
  97.  
  98. //Tenant types (not persistent, but determined at load time)
  99. typedef enum
  100.     {
  101.     TENANTTYPE_NULL=0,
  102.     TENANTTYPE_STATIC,
  103.     TENANTTYPE_EMBEDDEDOBJECT,
  104.     TENANTTYPE_EMBEDDEDFILE,
  105.     TENANTTYPE_EMBEDDEDOBJECTFROMDATA,
  106.     //CHAPTER12MOD
  107.     TENANTTYPE_LINKEDOBJECT,
  108.     TENANTTYPE_LINKEDFILE,
  109.     TENANTTYPE_LINKEDOBJECTFROMDATA
  110.     //End CHAPTER12MOD
  111.     } TENANTTYPE, FAR * LPTENANTTYPE;
  112.  
  113.  
  114. //State flags
  115. #define TENANTSTATE_DEFAULT      0x00000000
  116. #define TENANTSTATE_SELECTED     0x00000001
  117. #define TENANTSTATE_OPEN         0x00000002
  118. //CHAPTER12MOD
  119. #define TENANTSTATE_SHOWTYPE     0x00000004
  120. //End CHAPTER12MOD
  121.  
  122. class __far CTenant : public IUnknown
  123.     {
  124.     friend CImpIOleClientSite;
  125.     friend CImpIAdviseSink;
  126.  
  127.     private:
  128.         HWND            m_hWnd;             //Pages window, same as CPages.
  129.         DWORD           m_dwID;             //Persistent DWORD identifier
  130.         DWORD           m_cOpens;           //Count calls to FOpen.
  131.  
  132.         BOOL            m_fInitialized;     //Something here?
  133.         LPUNKNOWN       m_pObj;             //The object that lives here.
  134.         LPSTORAGE       m_pIStorage;        //Sub-storage for this tenant
  135.  
  136.         FORMATETC       m_fe;               //As used to create the object.
  137.         DWORD           m_dwState;          //State flags
  138.         RECTL           m_rcl;              //Space of this object.
  139.  
  140.         class CPages FAR *m_pPG;            //Pages window
  141.  
  142.         TENANTTYPE      m_tType;            //Type identifier
  143.         ULONG           m_cRef;             //We're an object now!
  144.         LPOLEOBJECT     m_pIOleObject;      //IOleObject on m_pObj
  145.         LPVIEWOBJECT    m_pIViewObject;     //IViewObject on m_pObj
  146.  
  147.         LPOLECLIENTSITE m_pIOleClientSite;  //Our interfaces
  148.         LPADVISESINK    m_pIAdviseSink;
  149.  
  150.         //CHAPTER12MOD
  151.         LPMONIKER       m_pmkFile;          //For IOleClientSite::GetMoniker
  152.         //End CHAPTER12MOD
  153.  
  154.     //CHAPTER12MOD
  155.     /*
  156.      * This flag is used exculsively by the implementation of
  157.      * IOleUILinkContainer on the page we're in for the Links Dialog.
  158.      * Since we never use it ourselves, public here is no big deal.
  159.      */
  160.     public:
  161.         BOOL            m_fLinkAvail;
  162.     //End CHAPTER12MOD
  163.  
  164.  
  165.     protected:
  166.         BOOL    FObjectInitialize(LPUNKNOWN, LPFORMATETC, DWORD);
  167.         HRESULT CreateStatic(LPDATAOBJECT, LPFORMATETC, LPUNKNOWN FAR *);
  168.  
  169.     public:
  170.         CTenant(DWORD, HWND, CPages FAR *);
  171.         ~CTenant(void);
  172.  
  173.         //Gotta have an IUnknown for delegation.
  174.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  175.         STDMETHODIMP_(ULONG) AddRef(void);
  176.         STDMETHODIMP_(ULONG) Release(void);
  177.  
  178.         DWORD   GetID(void);
  179.         UINT    GetStorageName(LPSTR);
  180.         UINT    UCreate(TENANTTYPE, LPVOID, LPFORMATETC, LPPOINTL
  181.                     , LPSIZEL, LPSTORAGE, LPPATRONOBJECT, DWORD);
  182.         BOOL    FLoad(LPSTORAGE, LPFORMATETC, LPRECTL);
  183.         BOOL    FOpen(LPSTORAGE);
  184.         void    Close(BOOL);
  185.         BOOL    Update(void);
  186.         void    Destroy(LPSTORAGE);
  187.  
  188.         void    Select(BOOL);
  189.         void    ShowAsOpen(BOOL);
  190.         void    ShowYourself(void);
  191.         void    AddVerbMenu(HMENU, UINT);
  192.         void    CopyEmbeddedObject(LPDATAOBJECT, LPFORMATETC, LPPOINTL);
  193.  
  194.         //CHAPTER12MOD
  195.         void    ShowObjectType(BOOL);
  196.         void    NotifyOfRename(LPSTR, LPMONIKER);
  197.         //End CHAPTER12MOD
  198.  
  199.         BOOL    Activate(DWORD);
  200.         void    Draw(HDC, DVTARGETDEVICE FAR *, HDC, int, int, BOOL, BOOL);
  201.         void    Repaint(void);
  202.         void    Invalidate(void);
  203.  
  204.         //CHAPTER12MOD
  205.         TENANTTYPE  TypeGet(void);
  206.         BOOL        FIsSelected(void);
  207.         BOOL        FConvertToStatic(void);
  208.         //End CHAPTER12MOD
  209.  
  210.         void    ObjectGet(LPUNKNOWN FAR *);
  211.         void    FormatEtcGet(LPFORMATETC, BOOL);
  212.         void    SizeGet(LPSIZEL, BOOL);
  213.         void    SizeSet(LPSIZEL, BOOL);
  214.         void    RectGet(LPRECTL, BOOL);
  215.         void    RectSet(LPRECTL, BOOL);
  216.     };
  217.  
  218.  
  219. typedef CTenant FAR * LPTENANT;
  220.  
  221. //Return codes for UCreate
  222. #define UCREATE_FAILED              0
  223. #define UCREATE_GRAPHICONLY         1
  224. #define UCREATE_PLACEDOBJECT        2
  225.  
  226.  
  227.  
  228. #endif //_TENANT_H_
  229.